package edu.java.homework.hw07.test0606c;


/*
Neka sa dadeni klasovete A, B, C, kato B naslediava A, C naslediava B.
Vseki ot klasovete definira poleto
int a;
1) Posochete i obiasnete zashto, koi ot operatorite v redovete otbeliazani s 
   (a) do (f) shte otpechatat stojnostta na promenlivata a ot klasa C.
2) Posochete i obiasnete zashto, koi ot operatorite v redovete otbeliazani s 
   (a) do (f) shte predizvikat greshka pri kompilaciia. 
*/



class A {
    int a = 1;
}

class B extends A {
    int a = 2;
}

class C extends B {
    int a = 3;

    public void proba(){
		System.out.println(a);             // (a)
		System.out.println(this.a);        // (b)
		System.out.println(super.a);       // (c)
//		System.out.println(super.super.a); // (d)
//		System.out.println((A)a);          // (e)
		System.out.println(((A)this).a);   // (f)
	}
}

public class Test0606c {
    public static void main(String args[]) {
	C c = new C();
	c.proba();
    }
}

// 1) Posochete i obiasnete zashto, koi ot operatorite v redovete otbeliazani s 
//(a) do (f) shte otpechatat stojnostta na promenlivata a ot klasa C.

//(a)  ок
//(b)  ок
//(c)  грешка , ще отпечата а-то на класа В
//(d)  грешка , не може да се вика супер от супер
//(e)  грешка , не може int стойност да се кастне към обект от тип класа А. Да не говорим, че няма никакъв смисъл.
//(f)  грешка , каства текущия обект от тип С към обект от тип А. Следователно ще достъпи а-полето на обекта от тип А.

//2) Posochete i obiasnete zashto, koi ot operatorite v redovete otbeliazani s 
//(a) do (f) shte predizvikat greshka pri kompilaciia. 
 
// Редовете d,e ще дадат грешка. При d) не може да викам супер от супер. При е) пък е недопустимо такова "кастване".


